Observatorio de Biodiversidad del Bosque Atlántico (OBBA) Instituto de Biología Subtropical (IBS) - Unidad Ejecutora del CONICET - UNaM
Fecha de publicación
21 de agosto de 2024
1 Tablas en R
Las tablas nos permiten presentar información que está comprendida en pocos datos o porque es necesario interpretar valores de resultados para estadísticos específicos. No es un recurso adecuado para grandes cantidades de datos … a menos que se quiera usarlas para filtrar, hacer subsets o interactuar con los datos.
Son muchos los paquetes disponibles para crear tablas en R. Estos paquetes fueron evolucionando desde tablas planas a un alto nivel de personalización mediante argumentos muy detallados y de múltiples opciones personalizables. Las más utilizadas al momento de este curso son:
library(gt) link-> Es una opción sencilla posible para obtener una tabla estática y básica. En pocas líneas podríamos modificar las características principales de cualquier tabla como son el título, subtítulo, columnas o filas agrupadas, cuerpo y pie de tabla. No insume el desarrollo de mucho código.
library(gt)gt(iris[1:2,]) |>tab_header(title =md("**Ejemplo de tabla gt ('Great Tables')**"),subtitle =md("Son las *primeras dos* filas de df iris") )
Ejemplo de tabla gt (‘Great Tables’)
Son las primeras dos filas de df iris
Sepal.Length
Sepal.Width
Petal.Length
Petal.Width
Species
5.1
3.5
1.4
0.2
setosa
4.9
3.0
1.4
0.2
setosa
library(kableExtra) link-> Es una opción que permite hacer las clásicas tablas en LaTeX que se hacían tradicionalmente en las publicaciones, pero además permite muchas personalización de colores y como alternativa se pueden crear las tablas en HTML.
# HTML tablekbl(dt, caption ="Demo Table") %>%kable_styling(bootstrap_options ="striped",full_width = F ) %>%add_header_above(c(" ", "Group 1"=2, "Group 2[note]"=2)) %>%footnote(c("table footnote"))
Demo Table
Group 1
Group 2[note]
mpg
cyl
disp
hp
Mazda RX4
21.0
6
160
110
Mazda RX4 Wag
21.0
6
160
110
Datsun 710
22.8
4
108
93
Hornet 4 Drive
21.4
6
258
110
Hornet Sportabout
18.7
8
360
175
Note:
table footnote
library(DT) link-> Es una gran opción para hacer tablas interactivas, filtrados, selecciones, subsets. Es ideal para usarlas en dashboards o grandes volúmenes de datos. Incluye filtros y permite ajustar entre otras cosas su paginación en el HTML para mostrar los datos de acuerdo al tamaño visual.
library(DT)datatable(iris)
- library(reactable) link-> Permite un nivel de personalización alto, con posibilidad de dar formatos condicionales intracelda e incluir filtros en las propias tablas. Ejemplos
library(reactable)reactable(iris)
1.1 Personalización y estilos
En el mundo académico (publicaciones, presentaciones a congresos) y en el desarrollo (webs, informes, dashboards, etc.) hay una tendencia recientemente nueva a personalizar y dar estilos a las tablas para facilitar la lectura e interpretación de los datos presentados.
# Libreriaslibrary(gt)library(gtExtras)library(tidyverse)library(janitor)# Set de datos de ejemplo.df <-read_csv("https://raw.githubusercontent.com/iminoli/EcoInformatics/master/pdf/Curso.R.2024/Practicos/Table3_C.csv" ) %>%clean_names()glimpse(df)
# Ejemplo de TABLA PERSONALIZADAdf %>%rename("Season"= season) %>%gt() %>%data_color(columns = valor_sp_a,method ="numeric",palette =c("#D0FAE1", "#96E0B6", "#54DE92", "#07BD59") ) %>%data_color(columns = valor_sp_b,method ="numeric",palette =c("#F2DCDC", "#F5B6B6", "#F28383", "#DB4444") ) %>%data_color(columns = valor_sp_c,method ="numeric",palette =c("#F2DCDC", "#F5B6B6", "#F28383", "#DB4444") ) %>%cols_merge(columns =c(valor_sp_a, disp_sp_a),pattern ="{1} {2}" ) %>%cols_merge(columns =c(valor_sp_b, disp_sp_b),pattern ="{1} {2}" ) %>%cols_merge(columns =c(valor_sp_c, disp_sp_c),pattern ="{1} {2}" ) %>%cols_label(Season =html("<strong>Season</strong>"),valor_sp_a =html("<strong>Group sp. A</strong>"),valor_sp_b =html("<strong>Group sp. B</strong>"),valor_sp_c =html("<strong>Group sp. C</strong>") ) %>%tab_style(cell_text(size =pct(85)),locations =cells_body(columns =c(valor_sp_a, valor_sp_b, valor_sp_c)) ) %>%cols_align(align ="center" ) %>%cols_align(align ="left",columns = Season ) %>%tab_header(title =html("<strong>Daily distance moved (m/day) for each studied area</strong>"),subtitle =html("Environments: <strong><span style='color:#0F9E50;'>Continuous Forest</span></strong> and <strong><span style='color:#DB4444;'>Fragmented Forest<span></strong>") ) %>%gtsave(# Guardo la tabla como archivo"Table_3.png"# Doy un nombre )# Exploro el archivo original a ser publicadobrowseURL("Table_3.png")
1.2 Objetos - Resúmenes
El paquete gt posee una serie de paquetes que están relacionados como: gtExtras y gtsummary.
library(gtsummary)# summarize the data with our packagepeng <- palmerpenguins::penguinspeng
# A tibble: 344 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
<fct> <fct> <dbl> <dbl> <int> <int>
1 Adelie Torgersen 39.1 18.7 181 3750
2 Adelie Torgersen 39.5 17.4 186 3800
3 Adelie Torgersen 40.3 18 195 3250
4 Adelie Torgersen NA NA NA NA
5 Adelie Torgersen 36.7 19.3 193 3450
6 Adelie Torgersen 39.3 20.6 190 3650
7 Adelie Torgersen 38.9 17.8 181 3625
8 Adelie Torgersen 39.2 19.6 195 4675
9 Adelie Torgersen 34.1 18.1 193 3475
10 Adelie Torgersen 42 20.2 190 4250
# ℹ 334 more rows
# ℹ 2 more variables: sex <fct>, year <int>
table_penguins <- peng |>tbl_summary(include =c(bill_length_mm, species),by = sex )
11 missing rows in the "sex" column have been removed.
table_penguins
Characteristic
female
N = 165
1
male
N = 168
1
bill_length_mm
42.8 (37.6, 46.2)
46.8 (41.0, 50.4)
species
Adelie
73 (44%)
73 (43%)
Chinstrap
34 (21%)
34 (20%)
Gentoo
58 (35%)
61 (36%)
1
Median (Q1, Q3); n (%)
2 Formatos de tablas
Pueden ser en formato LaTeX o en HTML. Las tablas HTML son más usadas y preferidas por ser livianas, fáciles de modificar y cambiar detalles gracias a lo simple que es el HTML. Anteriormente guardamos tablas como png, de esta manera es posible guardarlas en .html.
Los reportes en R o en cualquier otro lenguaje de programación documentando los pasos de análisis estadísticos o desarrollos, son imprescindibles y casi obligatorios en trabajos colaborativos. Al programar para hacer análisis o desarrollos es natural la necesidad que nace de explicar que hace cada linea de código, como se interpretan los resultados, que supuestos estad´siticos fueron cubiertos incialmente, etc.
Para todo esto se emplea en general un lenguaje llamado Markdown y su empleo en R se denomina R Markdown.
3.1 Rmarkdown
Markdown es un lenguaje de marcado diseñado para simplificar el proceso de dar formato a un texto mediante el uso de caracteres específicos. Originalmente, se creó con el propósito de escribir contenido destinado a la web de manera más rápida y fácil en comparación con el uso directo de HTML. Aunque su uso principal es en la creación de textos para la web, Markdown también es versátil y se puede aplicar a cualquier tipo de texto, sin importar su finalidad.
Se puede combinar texto y código a través del uso de “chunks” donde se ejecutan las lineas de comando. Ir a > File > New File > R Markdown > Ok y experimentar con el archivo.
3.2 Quarto
Quarto es una herramienta de código abierto utilizada en la programación para crear y publicar documentos dinámicos, como informes, libros, presentaciones, y sitios web. Está diseñada para trabajar con varios lenguajes de programación, incluidos R, Python, Julia y Observable JavaScript, lo que la hace muy versátil.
Quarto permite a los desarrolladores combinar código, texto y resultados en un solo documento, lo que facilita la creación de documentos reproducibles y bien documentados. Además, soporta la inclusión de visualizaciones, tablas, y otros elementos interactivos. Es particularmente popular en la comunidad de ciencia de datos y académica por su capacidad de integrar análisis de datos y narrativas en un formato cohesivo.
# Ejercicio 05.11- Descargar Quarto desde la web [https://quarto.org/docs/get-started/](https://quarto.org/docs/get-started/) e instalarlo.2- Abrir un documento Quarto HTML, ir a la solapa "Source".3- Elegir un dataset de la url https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/00Index.html.4- Crear un chunk de código con el shortcut CTRL+ALT+i y leer el dataset elegido, crear una tabla resumen con la función gt_plt_summary() y guardar la tabla como un .png.4- Crear con ese mismo set de datos una tabla completa en html con filtros y guardarla como html filtrable.